﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using MiPWinRTSDK.MiP.Models;
using Windows.Foundation;
using MiPWinRTSDK.MiP.Models.MiP;

namespace MiPWinRTSDK.Interfaces
{
    public interface IMiPRobot:IMiPBase
    {
        byte BatteryLevel { get; }
        GameModeEmum GameMode { get; set; }
        byte HardwareVersion { get; }
        byte IRControlStatus { get; set; }
        LightEnum Light1 { get; set; }
        LightEnum Light2 { get; set; }
        LightEnum Light3 { get; set; }
        LightEnum Light4 { get; set; }
        byte MiPDetectionIRTxPower { get; }
        byte MiPDetectionMode { get; }
        string MiPVersion { get; }
        GestureRadarEnum RadarMode { get; }
        StatusEnum Status { get; }
        byte VoiceChipVersion { get; }
        byte Volume { get; }
        byte Weight { get; }

        event EventHandler<ClapStatus> ClapStatusRecievedEvent;
        event EventHandler<byte> ClapTimesRecievedEvent;
        event EventHandler<EepromData> EePromDataRecievedEvent;
        event EventHandler<GameModeEmum> GameModeRecievedEvent;
        event EventHandler<GestureEnum> GestureRecievedEvent;
        event EventHandler<HeadLED> HeadLEDRecievedEvent;
        event EventHandler<byte> IRControlStatusRecievedEvent;
        event EventHandler<IList<byte>> IRDongleCodeRecievedEvent;
        event EventHandler<byte> MipDetectedRecievedEvent;
        event EventHandler<MiPDetectionStatus> MiPDetectionStatusRecievedEvent;
        event EventHandler<MiPHardwareVersion> MiPHardwareVersionRecievedEvent;
        event EventHandler<MiPStatus> MiPStatusRecievedEvent;
        event PropertyChangedEventHandler PropertyChanged;
        event EventHandler<GestureRadarEnum> RadarModeRecievedEvent;
        event EventHandler<byte> RadarRecievedEvent;
        event EventHandler<object> SleepRecievedEvent;
        event EventHandler<string> SoftwareVersionRecievedEvent;
        event EventHandler<byte> VolumeRecievedEvent;
        event EventHandler<byte> WeightUpdateRecievedEvent;

        IAsyncAction ClapEnabled(bool enabled);
        IAsyncAction ForceBLEDisconnect();
        IAsyncAction GetCurrentMIPGameMode();
        IAsyncAction GetRadarMode();
        IAsyncAction GetSoftwareVersion();
        IAsyncAction IRRemoteControlEnabled(bool enabled);
        IAsyncAction MIPGetUp(GetUpEnum getUp);
        IAsyncAction ReadOdometer();
        IAsyncAction RequestClapEnabled();
        IAsyncAction RequestIRControlEnabled();
        IAsyncAction RequestMiPDetectionMode();
        IAsyncAction RequestWeightUpdate();
        IAsyncAction ResetOdometer();
        IAsyncAction SendIRDongleCode(byte byte1, byte byte2, byte byte3, byte byte4, byte irdDataNumbers, byte irTxPower);
        IAsyncAction SetGameMode(GameModeEmum gamemode);
        IAsyncAction SetGestureOrRadarMode(GestureRadarEnum mode);
        IAsyncAction SetMiPDetectionMode(byte idNumber, byte irTxPower);
        IAsyncAction SetPosition(PositionEnum position);
        IAsyncAction SetVolume(byte volume);
    }
}